//1.借助idea自动生成构造方法；创建完成员变量后---右键---Generat---Constructor---按住control选中---ok
public class Test10 {
    public String name;
    public int age;

    public Test10(String name, int age) {
        this.name = name;
        this.age = age;
        //System.out.println("调用了构造方法");
    }
    public Test10(){
        this("武明",29);//必须在第一行
        //System.out.println("不带参数的构造方法");
    }

    public static void main(String[] args) {
        Test10 test10=new Test10("小黑",29);
        System.out.println(test10.name);
        System.out.println(test10.age);

        Test10 test101=new Test10();
        System.out.println(test101.name);
        System.out.println(test101.age);
    }
}



//2.JVm=JDK+JRE 就地初始化:  即使不通过构造方法显式赋值，对象也会有合法的初始状态（如 year 默认是 1900）。
public class Test10 {
    public int year = 1900;
    public int month = 1;
    public int day = 1;
    public  Test10(){
        this.year=year;
    }
    public static void main(String[] args) {
        Test10 test10=new Test10();
        System.out.println(test10.year);
    }
}




//2.封装  使用Private 成员变量，成员方法只能在类当中使用
//要访问Private成员变量 右键---generate---getter ang setter---ctrl选中
class Student{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
   public class  Test10{
       public static void main2(String[] args) {
          Student student=new Student();
          student.setName("wang");
           System.out.println(student.getName());
       }
   }

//3.包的作用。
/*1.避免类名冲突：不同包中可以存在同名的类，通过包名可以区分它们，解决了大型项目中可能出现的类名重复问题。例如，java.util.Date和java.sql.Date是两个不同的类，通过完整包名可以明确区分。
  2.便于代码管理和组织：可以按照功能或模块对类进行分组，使代码结构清晰。例如，将数据访问相关的类放在dao包中，将工具类放在util包中。
  3.控制访问权限：包提供了一种访问控制机制，使用default（默认）访问修饰符的类、方法和变量只能被同一包中的其他类访问，增强了代码的安全性。
  4.实现信息隐藏：通过合理划分包，可以将内部实现细节封装在特定包中，只对外暴露必要的接口，降低代码的耦合度。
  5.方便导入和使用：使用import语句可以导入其他包中的类，避免每次使用类时都书写完整的包名，简化代码编写。*/
import java.util.Date;     java.until(包名）  Date(类名)    java.util.Date（完整的类名）

import com.bite.www.Testbao;

//4.自己定义自己的包  src---右键---new---package---域名倒写---包名采用小驼峰
public class Test10{
    public static void main4(String[] args) {
        Testbao testbao=new Testbao();
        testbao.setday();
    }
}
//5.包的路径查看---找到包右键---openin---Explore
// 6.访问静态成员变量, 通过类名访问静态变量，静态的变量不需要实例化对象可以通过类名进行访问。
 class Student {
    public static String schoolName;
 }
//public class Test10 {
    public static void main(String[] args) {
        Student.schoolName="阳光";//通过类名给静态成员变量进行赋值操作
        System.out.println(Student.schoolName);
    }
}



//7.static修饰的成员变量不能修饰局部变量
// 称为静态成员变量，静态成员变量最大的特性：不属于某个具体的对象，是所有对象所共享的。
class Student1 {
    public String name;
    public String gender;
    public int age;
    public double score;
    public static String classRoom = "Bit306";
    public Student1(String name, String gender, int age, double score){
        this.name=name;
        this.age=age;
        this.gender=gender;
        this.score=score;
    }
}
public class Test10{
    public static void main(String[] args) {
        System.out.println(Student1.classRoom);
        Student1 student1 = new Student1("王刚", "女", 18, 8.0);
        Student1 student2 = new Student1("王美", "女", 19, 6.0);
        System.out.println(student1.name+student1.gender+student1.age+" "+student1.score);
    }
}